/**
 * @file helpers.js
 * @description 辅助工具函数
 */

/**
 * 延迟函数
 * @param {number} ms - 延迟毫秒数
 * @returns {Promise<void>}
 */
export function delay(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

/**
 * 随机打乱数组
 * @param {Array} array - 要打乱的数组
 * @returns {Array} 打乱后的数组
 */
export function shuffleArray(array) {
    const result = [...array];
    for (let i = result.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [result[i], result[j]] = [result[j], result[i]];
    }
    return result;
}

/**
 * 格式化时间（秒转为分秒）
 * @param {number} seconds - 秒数
 * @returns {string} 格式化后的时间字符串
 */
export function formatTime(seconds) {
    const mins = Math.floor(seconds / 60);
    const secs = seconds % 60;
    if (mins > 0) {
        return `${mins}分${secs}秒`;
    }
    return `${secs}秒`;
}

/**
 * 安全的JSON解析
 * @param {string} jsonString - JSON字符串
 * @param {any} defaultValue - 解析失败时的默认值
 * @returns {any} 解析结果或默认值
 */
export function safeJsonParse(jsonString, defaultValue = null) {
    try {
        return JSON.parse(jsonString);
    } catch (err) {
        console.error('JSON解析失败:', err);
        return defaultValue;
    }
}

/**
 * 获取数组中出现次数最多的元素
 * @param {Array} array - 输入数组
 * @returns {any} 出现次数最多的元素
 */
export function getMostFrequent(array) {
    if (!array || array.length === 0) return null;

    const frequency = {};
    let maxCount = 0;
    let mostFrequent = null;

    for (const item of array) {
        frequency[item] = (frequency[item] || 0) + 1;
        if (frequency[item] > maxCount) {
            maxCount = frequency[item];
            mostFrequent = item;
        }
    }

    return mostFrequent;
}

/**
 * 检查是否为有效的玩家编号
 * @param {string} tempId - 玩家临时编号
 * @returns {boolean} 是否有效
 */
export function isValidTempId(tempId) {
    return /^\d{2}$/.test(tempId);
}

/**
 * 生成指定范围内的随机整数
 * @param {number} min - 最小值（包含）
 * @param {number} max - 最大值（不包含）
 * @returns {number} 随机整数
 */
export function randomInt(min, max) {
    return Math.floor(Math.random() * (max - min)) + min;
}

